package cn.sx.yys.utils;

import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @author 猿帅
 * @email 1603194187@qq.com
 * @date 2021/3/24 10:54
 */
public class FastdfsUtils {
    public static String upload(MultipartFile file) {
        TrackerServer ts = null;
        StorageServer ss = null;
        String path = "http://www.yys.sx.cn:8088/";
        try {
            //获取文件字节数组
            byte[] fileBytes = file.getBytes();
            //获取文件名称
            String fileName = file.getOriginalFilename();
            //获取文件后缀
            String fileExtName = fileName.substring(fileName.lastIndexOf(".") + 1);
            //加载配置文件，目的是为了获取所有的TrackerServer的地址信息
            ClientGlobal.init("fastdfs.conf");
            TrackerClient tc = new TrackerClient();
            ts = tc.getConnection();
            ss = tc.getStoreStorage(ts);
            //创建Storage的客户端对象，需要利用这个对象来操作FastDFS，实现文件的上传下载和删除
            StorageClient sc = new StorageClient(ts, ss);
            //上传文件到FastDFS
            //参数 1 为需要上传的文件的字节数组
            //参数 2 为需要上传的文件的扩展名
            //参数 3 为需要上传的文件的属性文件通常为null不上传，这些文件的属性例如文件大小以及类型等信息通常需要记录到数据库中
            //注意：这个数组中的第一个元素为文件所在的FastDFS的组名，第二个元素为文件在FastDFS中的远程文件名称
            //   这两个数据通常我们是需要写入到数据库中的
            String[] result = sc.upload_file(fileBytes, fileExtName, null);

            path += result[0]+"/"+result[1];

        } catch (IOException e) {
            e.printStackTrace();
            return e.toString();
        } catch (MyException e) {
            e.printStackTrace();
            return e.toString();
        } finally {
            if (ss != null) {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ts != null) {
                try {
                    ts.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return path;
    }

}
